package com.lx.util;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: lx
 * @Date: 2019/8/2 23:11
 */
public enum ResultCode {

    //成功状态码
    SUCCESS(1,"成功"),
    FAILURE(0,"失败"),



    /* 参数错误：10001-19999 */
    PARAM_IS_INVALID(10001,"参数无效"),
    PARAM_IS_BLANK(10002,"参数为空"),
    PARAM_TYPE_BIND_ERROR(10003,"参数类型错误"),
    PARAM_NOT_COMPLETE(10004,"参数缺失"),

    /**
     * 用户错误
     */
    USER_NOT_LOGGED_IN(20001,"用户未登录"),
    USER_LOGIN_ERROR(20002,"账号不存在或密码错误"),
    USER_ACCOUNT_FORBIDDEN(20003,"账号已被禁用"),
    USER_NOT_EXIST(20004,"用户不存在"),
    USER_HAS_EXISTED(20005,"用户已存在"),
    USERNAME_HAS_EXISTED(20006,"用户名已存在"),

    /**
     * 业务错误：30001-39999
     */
    SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001,"某业务出现问题"),

    /**
     * 系统错误：40001-49999
     */
    SYSTEM_INNER_ERROR(40001,"系统繁忙，请稍后重试"),

    /**
     * 数据错误：50001-59999
     */
    RESULT_DATA_NONE(50001,"数据未找到"),
    DATA_IS_WRONG(50002,"数据有误"),
    DATA_ALREADY_EXISTED(50003,"数据已存在"),

    /**
     * 接口错误：60001-69999
     */
    INTERFACE_INNER_INVOKE_ERROR(60001,"内部系统接口调用异常"),
    INTERFACE_OUTTER_INVOKE_ERROR(60002,"外部系统调用异常"),
    INTERFACE_FORBID_VISIT(60003,"该接口禁止访问"),
    INTERFACE_ADDRESS_INVALID(60004,"接口地址无效"),
    INTERFACE_REQUEST_TIMEOUT(60005,"接口请求超时"),
    INTERFACE_EXCEED_LOAD(60006,"接口负载过高"),

    /**
     * 权限错误：70001-79999
     */

    PERMISSION_NO_ACCESS(70001,"无访问权限");

    /**
     *
     */

    private Integer code;

    private String message;

    ResultCode(Integer code,String message){
        this.code=code;
        this.message=message;
    }

    public Integer code(){
        return this.code;
    }

    public String message(){
        return this.message;
    }

    public static String getMessage(String name){
        for(ResultCode item : ResultCode.values()){
            if (item.name().equals(name)){
                return item.message;
            }
        }
        return null;
    }

    public static Integer getCode(String name){
        for(ResultCode item : ResultCode.values()){
            if(item.name().equals(name)){
                return item.code;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return this.name();
    }

    /**
     * 校验重复的code值，(***可去除***)
     */

    public static void main(String[] args) {
        ResultCode[] ApiResultCodes=ResultCode.values();
        List<Integer> codeList=new ArrayList<Integer>();
        for(ResultCode ApiResultCode : ApiResultCodes){
            if (codeList.contains(ApiResultCode.code)){
                System.out.println(ApiResultCode.code);
            }else {
                codeList.add(ApiResultCode.code());
            }
        }
    }

}
